import java.util.concurrent.*;

public class ThreadPool {
    public static void main(String[] args) {
        // 自定义线程池，工作中使用这种方法创建线程池
        ExecutorService threadPoolExecutor = new ThreadPoolExecutor(3,10,
                10000, TimeUnit.MILLISECONDS,
                new LinkedBlockingQueue<Runnable>());

        // 普通线程池，能够自动扩容，不需要指定上限
        ExecutorService cachedThreadPool = Executors.newCachedThreadPool();

        // 固定线程数量的线程池，不会自动扩容/缩容
        ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5);

        // 只包含一个线程的线程池
        ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();

        // 只有一个线程的定时器线程池
        ExecutorService singleThreadScheduledExecutor = Executors.newSingleThreadScheduledExecutor();

        // 线程池中的任务不是立即执行，而是未来某个时间点再执行（定时器）
        ExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(10);

        // 创建一个指定大小（不传入参数，为当前机器CPU核心数）的线程池，并行地处理任务，不保证处理顺序
        Executors.newWorkStealingPool();

    }
}
